5. XML Tag

xml 태그를 사용하기 위해서 페이지 상단에 다음과 같이 선언되어야 된다.
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x"%>

xml 태그는 다음과 같은 것들이 있다.

기능태그prefix
기본out, parse, setx
흐름 제어choose (when, otherwise), forEach, ifx
변환transform (param)x

XPath : xml 소스 트리의 정확한 위치를 지정해주기 위한 경로지정 문법이며 XSLT와 XPointer 를 위해서 만들어진 것이다. xml 엘리먼트들을 노드(node) 로 접근.

  • / 로 시작하면 절대경로처럼 root node 에서 시작된다.
  • //로 시작할 경우는 모든 영역에서 해당 엘리먼트를 선택하게 된다.
  • 표시는 이전 엘리먼트 아래의 모든 자식 엘리먼트를 나타낸다.
  • 동일한 엘리먼트들이 있을 경우, [] 안에 포함된 숫자는 엘리먼트의 순번이다. 조건식이 올 경우 해당하는 것이 선택된다. last() 일 경우는 맨 마지막 엘리먼트를 표시한다.
  • 속성은 @ 로 시작된다.
  • normalize-space() 함수는 앞뒤 공백을 제거하는 trim() 역할을 한다.

5.1 <x:out/>

XPath에 지정한 패턴에 따라 xml내용을 출력.

<x:out select="XPathExpression" [escapeXml="{true|WEBSTUDY:false}"]/>

5.2 <x:parse/>

xml문서를 읽어서 파싱.

<x:parse xml="XMLDocument"
{var="var" [WEBSTUDY:scope="scopeName"]\
varDom="var" [WEBSTUDY:scopeDom="scopeName"]}
[WEBSTUDY:systemId="systemId"]
[WEBSTUDY:filter="filter"]/>

5.3 <x:set/>

XPath에 따라 선택된 내용을 변수에 저장.

<x:set select="XPathExpression"
var="varName" [scope="{page\
WEBSTUDY:request|session|application}"]/>

5.4 <x:if/>

<c:if/> 태그와 마찬가지로 xml태그에도 <x:if/> 가 있고 형식은 <c:if/> 태그와 유사.

<x:if select="XPathExpression"
var="varName" [scope="{page\
WEBSTUDY:request|session|application}"]/>

5.5 <x:choose/>, <x:when/>, <x:otherwise/>

<c:choose/> 태그와 마찬가지로 xml태그에도 <x:choose/> 가 있고 형식은 <c:choose/> 태그와 유사.

<x:choose>
<x:when select="XPathExpression">
body content
</x:when>
.....
<x:otherwise>
conditional block
</x:otherwise>
</x:choose>

5.6 <x:forEach/>

<x:forEach/> 태그는 XPath에 따라서 해당하는 엘리먼트 수만큼 반복.

<x:forEach [WEBSTUDY:var="varName"] select="XPathExpression">
body content
</x:forEach>

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
<% response.setContentType("text/html;"); %>

<%-- 파라메터 받아서 출력 --%>
<c:if test="${!empty param.name}">
param: <x:out select="$param:name"/>
</c:if>

<form>
name: <input type="text" name="name">
<input type="submit">
</form>

<hr>

<%-- xml 데이터를 xdata 변수에 할당 --%>
<x:parse var="xdata">
<namecard>
    <person>
        <name>허광남</name>
        <id>남자</id>
        <email>kenu@email.com</email>
        <phone>111-2222-3333</phone>
    </person>
    <person>
        <name>노재춘</name>
        <id>남자</id>
        <email>suribada@email.com</email>
        <phone>222-3333-4444</phone>
    </person>
    <person>
        <name>이선재</name>
        <id>남자</id>
        <email>hsboy@email.com</email>
        <phone>333-4444-5555</phone>
    </person>
</namecard>
</x:parse>

<%-- XPath 를 이용해서 xdata에서 추출 --%>
<x:out select="$xdata//person[1]/name"/>
<x:out select="$xdata//person[last()]/name"/>

<hr>

<%-- person 으로 반복해서 email과 phone 출력 --%>
<table border="1">
<x:forEach select="$xdata//person">
<tr><td><x:out select="email" /></td>
<td><x:out select="phone" /></td></tr>
</x:forEach>
</table>

5.7 <x:transform/>, <x:param/>

<x:transform/> 태그는 xml과 xslt 파일을 결합해서 새로운 형식의 문서를 생성.
<x:param/> 태그는 xml의 파라메터를 지정한다.

문서에 대하여